package com.cykj.pos.mapper;

import com.cykj.common.core.domain.entity.SysDept;
import com.cykj.common.core.domain.entity.SysUser;
import com.cykj.pos.domain.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cykj.pos.domain.dto.BizTopupBillsDTO;
import com.cykj.pos.domain.dto.HomePageDTO;
import com.cykj.pos.domain.dto.MerchantVO;
import com.cykj.pos.domain.dto.ModifyRateDTO;
import com.cykj.pos.domain.vo.BizMerchParentRelated;
import com.cykj.pos.domain.vo.BizeServerCharge;
import com.cykj.pos.domain.BizSpecialRanking;
import com.cykj.pos.domain.BizWallet;
import com.cykj.pos.profit.dto.*;
import com.cykj.pos.profit.dto.MerchantDTO;
import com.cykj.pos.profit.dto.MerchantDict;
import com.cykj.system.domain.Wallet;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 报件商户信息Mapper接口
 *
 * @author ningbingwu
 * @date 2021-01-11
 */
public interface BizMerchantMapper extends BaseMapper<BizMerchant> {
    /**
     * 插入
     * @return
     */
    int updataMerchant(BizMerchant bizMerchant);
    int insterbizMerchBill(BizMerchBill bizMerchBill);
    int insterbizTopupBills(BizTopupBillsDTO bizTopupBillsDTO);
    BizMerchant selectAtmerchId(Long userId);

    SysUser selectsysUser(Long userId);

    BizMerchant getMerchantparentId(Long merchName);
    /**
     *查询merch——id
     * @return
     */
    String selectMerchId(String userId);
    /**
     * 运行函数（商户和上级商户的对应关系信息 biz_merch_parent_related）
     */
    void generateAllPosMerchParentRelated();
    /**
     *查询merch——id
     * @return
     */
    String selectMerchIdadd(String nickName);
    /**
     * 插入
     * @return
     */
    int insertMerchant(BizMerchant bizMerchant);
    /**
     * 查询所有伙伴
     * @return
     */
    List<MerchantDTO> queryParentuser(Long userId);

    List<MerchantDTO> queryParentusers(Long userId);

    BizWallet selectwallet(Long userId);
    int updateTopUp(BizWallet bizMerchartlist);
    /**
     * 查询商户的直接伙伴信息 魏建波
     * @param merchantDTO
     * @return
     */
    List<MerchantDict> selectPagedPartnerList(MerchantDTO merchantDTO);

    /**
     * 本月新增伙伴 魏建波
     * @param homePageDTO
     * @return
     */
    Integer getMonthlyNewPartnerCount(HomePageDTO homePageDTO);
    /**
     * 本月新增商户 魏建波
     * @param homePageDTO
     * @return
     */
    Integer getMonthlyNewMerchCounts(HomePageDTO homePageDTO);

    /**
     * 获得直接父合作伙伴和总部服务中心 魏建波
     * @param parentMerchId
     * @return
     */
    List<BizMerchant> selectParentMerchByUserId(Long parentMerchId);

    /**
     * 查看首页数据  一个sql完事
     * @param homePageDTO
     * @return
     */
    HomePageDataDTO selectHomePageDataDTO(HomePageDTO homePageDTO);

    /**
     * 本月数据信息
     * @param homePageDTO
     * @return
     */
    TransAmountDataDTO selectTransAmountDataDTO(HomePageDTO homePageDTO);

    /**
     * 当日数据信息 JLL
     * @param homePageDTO
     * @param pageNo
     * @param pageSize
     * @return
     */
//    List<PersonAndTeamDataDTO> selectPersonAndTeamDataDTO(Long homePageDTO, Integer pageNo, Integer pageSize);

    /**
     * 查询子商户
     * @param personAndTeamDataDTO
     * @return
     */
    List<MerchantInfoDTO> queryMerchantInfo(MerchantDTO personAndTeamDataDTO);

    /**
     * 按条件查子商户
     * @param personAndTeamDataDTO
     * @return
     */
    List<MerchantInfoDTO> queryOrderlyMerchantInfo(MerchantDTO personAndTeamDataDTO);

    /**
     * 按照sn_code查询信息
     * @param id
     * @return
     */
    MerchantInfoDTO queryMerchantEquipmentInfo(String id);

    void updateTerminalNo(@Param("snCode") String snCode, @Param("terminalNo") String terminalNo);

    /**
     * 获取伙伴详细信息
     * @param partnerDTO
     * @return
     */
    PartnerDTO selectPartnerDetail(PartnerDTO partnerDTO);
    /**
     * 获得所有商户  包括没有实名的
     * @param personAndTeamDataDTO
     * @return
     */
    List<MerchantVO> getChildMerchantList(MerchantDTO personAndTeamDataDTO);

    /**
     * 获得伙伴信息
     * @param partnerDTO
     * @return
     */
    PartnerDTO getPagedPartnerDataInfo(PartnerDTO partnerDTO);
    /**
     * 获得伙伴的直接伙伴个数
     * @param sysUserDTO
     * @return
     */
    Integer getChildMerchantCounts(SysUserDTO sysUserDTO);
    /**
     * 查询当前人所有下级
     * @param merchantDTO)
     * @return
     */
    List<MerchantDict> selectPagedPartnerListAll(MerchantDTO merchantDTO);

    /**
     * 查询商户交易记录
     * @param merchantInfoDTO
     * @return
     */
    MerchantInfoDTO queryMerchantAmount(MerchantInfoDTO merchantInfoDTO);

    /**
     * 伙伴详情 按交易额 统计图
     * @param merchantDTO
     * @return
     */
    PartnerDetailDTO getPartnerAmountStatistical(MerchantDTO merchantDTO);

    /**
     * 伙伴详情 按激活数 统计图
     * @param merchantDTO
     * @return
     */
    PartnerDetailDTO getPartnerMachinesStatistical(MerchantDTO merchantDTO);

    /**
     * 查询上级信息
     * @param userId
     * @return
     */
    SysUser getSuperior(Long userId);
    /**
     * 插入商户和上级商户的对应关系信息 biz_merch_parent_related
     * @param merchId
     */
    void generateMerchParentRelated(Long merchId);

    /**
     * app我的查询
     * @param userVo
     * @return
     */
    HomePageDataDTO selectHomePageDataDTOInfo(SysUserDTO userVo);

    /**
     * app排行榜
     * @param merchantDTO
     * @return
     */
    List<RankingDTO> queryPartnerRankingByTime(MerchantDTO merchantDTO);

    /**
     * 查询所有父级
     * @param bizMerchant
     * @return
     */
    BizMerchant queryAllParent(BizMerchant bizMerchant);

    /**
     * vue商户转移查询伙伴列表所有
     * @param bizMerchant
     * @return
     */
    List<BizMerchant> queryListUi(BizMerchant bizMerchant);

    /**
     * VUE伙伴转移
     * @param bizMerchart
     * @return
     */
    int updateByIdVue(BizMerchant bizMerchart);

    /**
     * 把要调整的伙伴'邀请人'改为新伙伴的userid
     * @param userId
     * @param
     * @return
     */
    int updateByUserId(@Param("newUserId") Long newUserId, @Param("userId")Long userId);

    /**
     * 运行函数（商户和上级商户的对应关系信息 biz_merch_parent_related）
     */
    public void generateAllMerchParentRelated();

    /**
     * 查询所有假数据 排行榜 昨天的
     * @param merchantDTO
     * @return
     */
    List<BizSpecialRanking> querySpecialRankingByTime(MerchantDTO merchantDTO);

    /**
     * 查询所有假数据 排行榜 月的
     * @param merchantDTO
     * @return
     */
    List<BizSpecialRanking> querySpecialRankingByMonth(MerchantDTO merchantDTO);

    List<com.cykj.pos.domain.dto.MerchantDTO> personList(Long userId);

    /**
     * 查询费率
     */
    List<PartnerDTO> findRate(Long userId);

    String findRateDetail(String rate);

    /**
     * 修改伙伴费率
     */
    void modifyRate(ModifyRateDTO modifyRateDTO);

    /**
     * xxl根据sn查询伙伴
     * @param snCode
     * @return
     */
    BizMerchant selectBizMerchantBySN(String snCode);

    /**
     * 更改设备为  未绑定
     * @param snCode
     */
    void updataMerchantStatus(String snCode);
//运行函数
    void generateAllPosMerchantRelatedProcedure();

    BizMerchantReturnMoney selectBizServiceCharge(Long userId);

    //查询流量费和服务费
    List<BizeServerCharge> echoServerBizServiceCharge();

    void updataserverRate(ModifyRateDTO modifyRateDTO);

    Long selectServerId(Long userId);

    /**
     * 回显我的伙伴费率
     * @param modifyRateDTO
     * @return
     */
    ModifyRateDTO echoRate(ModifyRateDTO modifyRateDTO);

    /**
     * 查询机构
     * @return
     * @param outmer
     */
    List<BizOrganization> selectBizOrganization(String outmer);

    /**
     * 查询商户是否签约
     * @param bizMerchant
     * @return
     */
    BizMerchantReceiver selectBizMerchantReceiver(BizMerchant bizMerchant);

    BizMerchantReceiver selectBizMerchantReceiverTypeB(BizMerchant bizMerchant);

    SysDept getDeptByUserId(Long userId);

    List<BizTransactionAmountEntity> getSomeData();
    @Insert("INSERT INTO `biz_back_merchant` ( `merchant_code`) VALUES ( #{merchantCode})")
    void saveBackMerchant(String merchantCode);

    @Select("select * from sys_user where user_id=( select user_id from biz_merchant where merch_id= (select bm.parent_id  from biz_merchant bm where bm.user_id=#{userId}))")
    SysUser selectParentMerchByUserIds(Long userId);
    List<BizWallet> selectsubwallet(Long userId);

    @Select("select merch_id,merch_name,sum(amount) amount from biz_merch_bill where (merch_id IN (SELECT aa.child_id FROM biz_merch_parent_related aa WHERE aa.parent_id = #{merchId} ) OR merch_id = #{merchId} )   group by merch_id,merch_name order by sum(amount)")
    List<BizMerchBill> getAllYE(Long merchId);

    @Select("select bw.* from biz_wallet bw left join biz_merchant bm on bw.user_id=bm.user_id where bm.merch_id=#{merchId}")
    Wallet selectWalletByMerchId(Long merchId);

    List<BizMerchant> getParentsByMerchId(Long merchId);

    BizMerchant selectInfoByMerchId(Long merchId);

    List<BizMerchParentRelated> getMerchantListByMerchId(Long merchId);

    BizMerchant getWithdrawalInterval(Long userId);

    WithdrawalRateTemplate getWithdrawalData(String withdrawalId);

    List<Long> getMerchantByNameLike(String merchName);

    BizMerchant selectInfoByUserId(Long userId);

    WithdrawalRateTemplate getDefaultWithdrawalTemplate();

    List<BizMerchant> getAllMerchants();

    List<BizMerchant> selectAllMerchList(BizMerchant bizMerchant);

    List<BizWalletNew> queryWalletDetail(BizMerchant bizMerchant);

    List<Long> selectChildMerchList(Long merchId);
}
